package com.yanggu.scala.chapater09.implicitFun

//导入对应的规则类，以免出现警告
import scala.language.implicitConversions

//指定某些数据类型的相互转化
//隐式转换函数的函数名可以是任意的, 与函数名无关, 只与函数的签名有关, 即函数的形参和返回值
object ImplicitFunDemo01 {

  def main(args: Array[String]): Unit = {

    //这里定义了隐式转换函数, 使用implicit关键字修饰只有单个参数的方法, 并且有返回值
    //隐式转换函数只在当前作用于生效
    //可以使用import关键字导入相应的隐式函数
    implicit def f1(num: Double): Int = num.toInt

    implicit def f2(num: Float): Int = num.toInt

    //隐式函数可以有多个, 当时需要保证在当前环境下, 只能有一个函数被识别, 否则会发生编译错误
    //implicit def f3(num: Float): Int = num.toInt

    //scala中有下划线的就是有隐式转换, 编译器识别了隐式转换函数
    val num: Int = 3.5D
    println(num)

    val num2: Int = 3.5f
    println(num2)
  }

}
